Telegram Group & Telegram Channel
💡 Сегодня покажу вам способ, как удобно логировать enum-значения в C++, не превращая код в кашу из switch и if.

📌 Проблема: у вас есть enum, и вы хотите красиво выводить его в лог или std::cout, но стандартно C++ этого не умеет.

Например:


enum class Status {
Ok,
Error,
Timeout
};


Обычно вы пишете:


std::string to_string(Status s) {
switch(s) {
case Status::Ok: return "Ok";
case Status::Error: return "Error";
case Status::Timeout: return "Timeout";
}
return "Unknown";
}


Но есть способ проще и без switch — с помощью макроса и X-макросов:


#define STATUS_ENUM(XX) \
XX(Ok) \
XX(Error) \
XX(Timeout)

enum class Status {
#define GENERATE_ENUM(name) name,
STATUS_ENUM(GENERATE_ENUM)
#undef GENERATE_ENUM
};

inline const char* to_string(Status s) {
switch(s) {
#define GENERATE_CASE(name) case Status::name: return #name;
STATUS_ENUM(GENERATE_CASE)
#undef GENERATE_CASE
default: return "Unknown";
}
}


Теперь достаточно один раз задать список значений — и не нужно вручную синхронизировать enum и to_string().

Такой подход легко масштабируется.
Удобно для логирования, отладки и сериализации.

Пользуйтесь!

➡️ @cpp_geek



tg-me.com/cpp_geek/307
Create:
Last Update:

💡 Сегодня покажу вам способ, как удобно логировать enum-значения в C++, не превращая код в кашу из switch и if.

📌 Проблема: у вас есть enum, и вы хотите красиво выводить его в лог или std::cout, но стандартно C++ этого не умеет.

Например:


enum class Status {
Ok,
Error,
Timeout
};


Обычно вы пишете:


std::string to_string(Status s) {
switch(s) {
case Status::Ok: return "Ok";
case Status::Error: return "Error";
case Status::Timeout: return "Timeout";
}
return "Unknown";
}


Но есть способ проще и без switch — с помощью макроса и X-макросов:


#define STATUS_ENUM(XX) \
XX(Ok) \
XX(Error) \
XX(Timeout)

enum class Status {
#define GENERATE_ENUM(name) name,
STATUS_ENUM(GENERATE_ENUM)
#undef GENERATE_ENUM
};

inline const char* to_string(Status s) {
switch(s) {
#define GENERATE_CASE(name) case Status::name: return #name;
STATUS_ENUM(GENERATE_CASE)
#undef GENERATE_CASE
default: return "Unknown";
}
}


Теперь достаточно один раз задать список значений — и не нужно вручную синхронизировать enum и to_string().

Такой подход легко масштабируется.
Удобно для логирования, отладки и сериализации.

Пользуйтесь!

➡️ @cpp_geek

BY C++ geek


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_geek/307

View MORE
Open in Telegram


C geek Telegram | DID YOU KNOW?

Date: |

Find Channels On Telegram?

Telegram is an aspiring new messaging app that’s taking the world by storm. The app is free, fast, and claims to be one of the safest messengers around. It allows people to connect easily, without any boundaries.You can use channels on Telegram, which are similar to Facebook pages. If you’re wondering how to find channels on Telegram, you’re in the right place. Keep reading and you’ll find out how. Also, you’ll learn more about channels, creating channels yourself, and the difference between private and public Telegram channels.

Unlimited members in Telegram group now

Telegram has made it easier for its users to communicate, as it has introduced a feature that allows more than 200,000 users in a group chat. However, if the users in a group chat move past 200,000, it changes into "Broadcast Group", but the feature comes with a restriction. Groups with close to 200k members can be converted to a Broadcast Group that allows unlimited members. Only admins can post in Broadcast Groups, but everyone can read along and participate in group Voice Chats," Telegram added.

C geek from sg


Telegram C++ geek
FROM USA